package com.itheima.a07myzipstream;

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class ZipStreamDemo1 {
    public static void main(String[] args) throws IOException {
        //熟悉解压缩
        //解压缩本质：利用解压缩流读取压缩包里面的内容，按照层级拷贝到目的地

        //把压缩包D:\Java\bbb.zip解压到D:\Java

        //创建file对象再写一个解压缩方法
        File start = new File("D:\\Java\\bbb.zip");
        File end = new File("D:\\Java");


        //解压缩
        unZip(start,end);
    }

    public static void unZip(File start,File end) throws IOException {

        //已经有了压缩包地址和要解压到的地址，现在创建解压缩流对象读取压缩包内容就行
        //创建解压缩流对象
        ZipInputStream zis=new ZipInputStream(new FileInputStream(start));

        //读取内容，读取到的内容时zipentry类型
        ZipEntry zn;
        while ((zn=zis.getNextEntry())!=null){
            System.out.println(zn);
            //判断
            if(zn.isDirectory()){
                //是文件夹,直接创建文件夹就好
                new File(end,zn.getName()).mkdirs();
            }else {
                //是文件,读取文件内容并写到对应位置
                //注意需要使用解压缩流才能读取压缩包内容
                //创建输出对象
                FileOutputStream fos = new FileOutputStream(new File(end, zn.getName()));
                int i;
                while ((i=zis.read())!=-1){
                    //写入
                    fos.write(i);
                }
                fos.close();
            }
            zis.closeEntry();
        }
        zis.close();
    }

}
